function All() { }
All.prototype = {
  timer: '',
  debounce(fn, delay = 500) {
    var _this = this;
    return function (arg) {
      //获取函数的作用域和变量
      let that = this;
      let args = arg;
      clearTimeout(_this.timer); // 清除定时器
      _this.timer = setTimeout(function () {
        fn.call(that, args);
      }, delay);
    };
  },
  setCookie(val) {
    //cookie设置[{key:value}]、获取key、清除['key1','key2']
    // 优化前
    // for (var i = 0, len = val.length; i < len; i++) {
    //   for (var key in val[i]) {
    //     document.cookie =
    //       key + '=' + encodeURIComponent(val[i][key]) + '; path=/';
    //   }
    // }
    // 优化后，forEach
    val.forEach((item) => {
      for (var key in item) {
        document.cookie =
          key + '=' + encodeURIComponent(item[key]) + '; path=/';
      }
    });
  },
  getCookie(name) {
    const cookieString = document.cookie;
    const cookieArray = cookieString.split('; ');
    for (let i = 0; i < cookieArray.length; i++) {
      const cookie = cookieArray[i].split('=');
      if (name === cookie[0]) {
        return decodeURIComponent(cookie[1]);
      }
    }
  },
  clearCookie(name) {
    var myDate = new Date();
    myDate.setTime(-1000); //设置时间
    // 优化前
    // for (var i = 0, len = name.length; i < len; i++) {
    //   document.cookie =
    //     '' + name[i] + "=''; path=/; expires=" + myDate.toGMTString();
    // }
    // 优化后使用forEach方法来遍历name
    name.forEach(function (cookieName) {
      document.cookie =
        cookieName + "=''; path=/; expires=" + myDate.toGMTString();
    });
  },
  arrToStr(arr) {
    // 优化前
    // if (arr) {
    //   return arr
    //     .map((item) => {
    //       return item.name;
    //     })
    //     .toString();
    // }
    // 优化前，使用了map方法和toString方法，需要进行两次操作；优化后，使用了map和join方法，只需要进行一次操作
    return arr ? arr.map((item) => item.userStaffName).join(',') : '';
  },
  toggleClass(arr, elem, key = 'id') {
    return arr.some((item) => {
      return item[key] == elem[key];
    });
  },
  //
  toChecked(arr, elem, key = 'id') {
    var isIncludes = this.toggleClass(arr, elem, key);
    !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key);
  },
  //   //
  //   toChecked(arr, elem, key = 'id') {
  //     arr[!this.toggleClass(arr, elem, key) ? 'push' : 'removeEle'](elem, key);
  //   },
  removeEle(arr, elem, key = 'id') {
    // 优化前
    var includesIndex;
    // arr.map((item, index) => {
    //   if (item[key] == elem[key]) {
    //     includesIndex = index;
    //   }
    // });
    // arr.splice(includesIndex, 1);
    // 优化后，使用findIndex方法
    let index = arr.findIndex((item) => item[key] == elem[key]);
    arr.splice(index, 1);
  },
  // 优化前
  //   setApproverStr(nodeConfig) {
  //     if (nodeConfig.settype == 1) {
  //       if (nodeConfig.nodeUserList.length == 1) {
  //         return nodeConfig.nodeUserList[0].name;
  //       } else if (nodeConfig.nodeUserList.length > 1) {
  //         if (nodeConfig.auditType == 1) {
  //           return this.arrToStr(nodeConfig.nodeUserList);
  //         } else if (nodeConfig.auditType == 2) {
  //           return nodeConfig.nodeUserList.length + '人会签';
  //         }
  //       }
  //     } else if (nodeConfig.settype == 2) {
  //       let level =
  //         nodeConfig.directorLevel == 1
  //           ? '直接主管'
  //           : '第' + nodeConfig.directorLevel + '级主管';
  //       if (nodeConfig.auditType == 1) {
  //         return level;
  //       } else if (nodeConfig.auditType == 2) {
  //         return level + '会签';
  //       }
  //     } else if (nodeConfig.settype == 4) {
  //       if (nodeConfig.selectRange == 1) {
  //         return '发起人自选';
  //       } else {
  //         if (nodeConfig.nodeUserList.length > 0) {
  //           if (nodeConfig.selectRange == 2) {
  //             return '发起人自选';
  //           } else {
  //             return '发起人从' + nodeConfig.nodeUserList[0].name + '中自选';
  //           }
  //         } else {
  //           return '';
  //         }
  //       }
  //     } else if (nodeConfig.settype == 5) {
  //       return '发起人自己';
  //     } else if (nodeConfig.settype == 7) {
  //       return (
  //         '从直接主管到通讯录中级别最高的第' +
  //         nodeConfig.examineEndDirectorLevel +
  //         '个层级主管'
  //       );
  //     }
  //   },
  // 优化后 ，使用switch语句
  setApproverStr(nodeConfig) {
    let approverStr;
    switch (nodeConfig.approverType) {
      case 1:
        if (nodeConfig.nodeUserList.length == 1) {
          approverStr = nodeConfig.nodeUserList[0].userStaffName;
        } else if (nodeConfig.nodeUserList.length > 1) {
          if (nodeConfig.auditType == 1) {
            approverStr = this.arrToStr(nodeConfig.nodeUserList);
          } else if (nodeConfig.auditType == 2) {
            approverStr = nodeConfig.nodeUserList.length + '人会签';
          }
        }
        break;
      case 2:
        let level =
          nodeConfig.directorLevel == 1
            ? '直接主管'
            : '第' + nodeConfig.directorLevel + '级主管';
        if (nodeConfig.auditType == 1) {
          approverStr = level;
        } else if (nodeConfig.auditType == 2) {
          approverStr = level + '会签';
        }
        break;
      case 4:
        if (nodeConfig.selectRange == 1) {
          approverStr = '发起人自选';
        } else {
          if (nodeConfig.nodeUserList.length > 0) {
            if (nodeConfig.selectRange == 2) {
              approverStr = '发起人自选';
            } else {
              approverStr =
                '发起人从' + nodeConfig.nodeUserList[0].userStaffName + '中自选';
            }
          } else {
            approverStr = '';
          }
        }
        break;
      case 5:
        approverStr = '发起人自己';
        break;
      case 7:
        approverStr =
          '从直接主管到通讯录中级别最高的第' +
          nodeConfig.examineEndDirectorLevel +
          '个层级主管';
        break;
    }
    return approverStr;
  },
  dealStr(str, obj) {
    let arr = [];
    let list = str.split(',');
    // 优化前
    // for (var elem in obj) {
    //   list.map((item) => {
    //     if (item == elem) {
    //       arr.push(obj[elem].value);
    //     }
    //   });
    // }
    // 优化后：优化前使用 for in 循环，会迭代出对象的所有可枚举属性，包括原型链上的属性，会导致多次循环，影响性能。 优化后使用 forEach 循环，并使用 hasOwnProperty 来检查是否为自身属性，提高了执行效率。
    list.forEach((item) => {
      if (obj.hasOwnProperty(item)) {
        arr.push(obj[item].value);
      }
    });
    return arr.join('或');
  },
  conditionStr(nodeConfig, index) {
    const { conditionType, item, nodeUserList } = nodeConfig.conditionNodes[index];
    let str = '其他条件'
    if(conditionType === 1){
      str = '不满足其他分支条件时，进入该分支'
      return str
    }
    // 人员字符串连接
    if (nodeUserList.length > 0) {
      str = '发起人属于：'
      str += nodeUserList.map((item) => item.userStaffName).join(',');

    }
    if (item?.length > 0) {
      for (let i = 0; i < item.length; i++) {
        let flag = str === '' ? '': '并且'
        let { optType, leftCustomContent, rightCustomContent, showName, leftOptType, rightOptType } = item[i]
        let optTypeStr = ["", "<", ">", "≤", "=", "≥"][optType]
        str += ` ${flag} ${showName} ${optTypeStr} ${leftCustomContent} `
      }
    }
    
    return str
  },
  copyerStr(nodeConfig) {
    // 修改前
    // if (nodeConfig.nodeUserList.length != 0) {
    //   return this.arrToStr(nodeConfig.nodeUserList);
    // } else {
    //   if (nodeConfig.ccSelfSelectFlag == 1) {
    //     return '发起人自选';
    //   }
    // }
    // 修改后：优化前使用了if else语句，而优化后使用了三元表达式，使得代码更加简洁，更易读。
    return nodeConfig.nodeUserList.length != 0
      ? this.arrToStr(nodeConfig.nodeUserList)
      : nodeConfig.ccSelfSelectFlag == 1
        ? '发起人自选'
        : '';
  },
  toggleStrClass(item, key) {
    // 修改前
    //   let a = item.zdy1 ? item.zdy1.split(",") : []
    //   return a.some(item => { return item == key });
    // 修改后：优化前使用了some方法来检查数组中是否存在特定的值，优化后使用includes方法来检查数组中是否存在特定的值，并且在检查之前使用了短路运算符来确保item.zdy1有值，如果没有值则使用空字符串。
    let a = (item.zdy1 || '').split(',');
    return a.includes(key);
  },
};

export default new All();
